// 格式化日期
export function formatDate(date, fmt = 'YYYY-MM-DD HH:mm:ss') {
  if (!date) return '-'
  
  let parsedDate
  try {
    if (typeof date === 'string') {
      // 尝试直接创建日期对象
      parsedDate = new Date(date)
      // 如果日期无效，尝试替换 - 为 /
      if (isNaN(parsedDate.getTime())) {
        parsedDate = new Date(date.replace(/-/g, '/'))
      }
    } else if (typeof date === 'number') {
      // 如果是毫秒时间戳
      parsedDate = new Date(date)
    } else if (date instanceof Date) {
      parsedDate = date
    } else {
      return '-'
    }

    // 验证日期是否有效
    if (isNaN(parsedDate.getTime())) {
      return '-'
    }

    const o = {
      'Y+': parsedDate.getFullYear(),
      'M+': parsedDate.getMonth() + 1,
      'D+': parsedDate.getDate(),
      'H+': parsedDate.getHours(),
      'm+': parsedDate.getMinutes(),
      's+': parsedDate.getSeconds(),
      'q+': Math.floor((parsedDate.getMonth() + 3) / 3),
      'S': parsedDate.getMilliseconds()
    }

    for (let k in o) {
      if (new RegExp('(' + k + ')').test(fmt)) {
        const str = o[k].toString()
        fmt = fmt.replace(RegExp.$1, 
          RegExp.$1.length === 1 ? str : ('00' + str).slice(str.length)
        )
      }
    }

    return fmt
  } catch (error) {
    console.error('日期格式化错误:', error)
    return '-'
  }
}

// 格式化金额
export function formatPrice(price, decimals = 2) {
  if (!price && price !== 0) return '¥0.00'
  return `¥${Number(price).toFixed(decimals)}`
}

// 格式化文件大小
export function formatFileSize(bytes) {
  if (!bytes) return '0 B'
  const k = 1024
  const sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']
  const i = Math.floor(Math.log(bytes) / Math.log(k))
  return (bytes / Math.pow(k, i)).toPrecision(3) + ' ' + sizes[i]
}

// 格式化数字（添加千分位）
export function formatNumber(num) {
  if (!num && num !== 0) return ''
  return num.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,')
} 